﻿namespace Jiubang.Collections {
    using System;
    using System.Collections.Generic;

    /// <summary>
    /// 分页的列表。
    /// 由当前列项目与列表总项目数组成。
    /// </summary>
    public struct PagedList<T> {
        private int recordCount;

        /// <summary>
        /// 初始化一个默认的分页列表
        /// </summary>
        /// <param name="items"></param>
        public PagedList(IList<T> items)
            : this() {
            Items = items;
            if (items == null)
                recordCount = -1;
            else
                recordCount = items.Count;
        }

        /// <summary>
        /// 获取当前列表的项集合。
        /// </summary>
        public IList<T> Items { get; private set; }

        /// <summary>
        /// 获取当前列表的指定序号的项。
        /// 如不确认列表是否为null，
        /// 应先判断Length属性。
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        public T this[int i] {
            get {
                return Items[i];
            }
        }

        /// <summary>
        /// 返回当前列表的真实长度。
        /// 如当前列表为null时长度返回-1。
        /// </summary>
        public int Length {
            get {
                return Items == null ? -1 : Items.Count;
            }
        }

        /// <summary>
        /// 设置或获取完整列表包含项目的总数。
        /// 如设置的值小于列表本身长度将抛出异常。
        /// </summary>
        public int RecordCount {
            get {
                return recordCount;
            }
            set {
                if (value < Length)
                    throw new ArgumentOutOfRangeException("value", value, "少于列表长度" + Length);
                recordCount = value;
            }
        }
    }
}